package ScalaStudy.chapter08

object Test01_patternMatchBase {
  def main(args: Array[String]): Unit = {


    //////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////  模式匹配  ////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


    println("===================  基本语法  ===================")

    val x: Int = 2
    val y: String = x match {
      case 1 => "one"
      case 2 => "two"
      case 3 => "three"
      case _ => "other"
    }

    println(y)

    println("===================  使用实例  ===================")

    //用模式匹配实现简单的二元运算
    val a = 25
    val b = 13

    def matchDualOp(op:Char) = op match {   //因为返回的类型可以是整数也可以是字符串，所以他们的公共父类是any
      case '+' => a + b
      case '-' => a - b
      case '*' => a * b
      case '/' => a / b
      case '%' => a % b
      case _   => "非法运算符"
    }

    println(matchDualOp('-'))
    println(matchDualOp('\\'))


    //////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////  模式守卫  //////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////


    //测试模式守卫

    println("================== 求一个整数的绝对值 ==================")

    def abs(num: Int): Int = {
      num match{
        case i if i >= 0 =>  i
        case i if i <= 0 => -i
      }
    }

    println(abs(-1))
    println(abs(0))
    println(abs(1))


  }
}
